Clear IRQ_GUEST in irq_desc->status when setting action to NULL.
authorIgor Mammedov <imammedo@redhat.com>
Sat, 17 Sep 2011 23:00:26 +0000 (00:00 +0100)
committerIgor Mammedov <imammedo@redhat.com>
Sat, 17 Sep 2011 23:00:26 +0000 (00:00 +0100)
commit022aa5fea4fcd347a1657baac68eae8d24fe3b9f
tree65455f471e4390f8817a2be439ead59b1853e254
parentd25d48e6ad8801959c9680d02c141a3572d2c6bc
Clear IRQ_GUEST in irq_desc->status when setting action to NULL.

Looking more closely at usage of action field with relation to
IRQ_GUEST flag. It appears that set IRQ_GUEST implies that action
is not NULL. As result it is not safe to set action to NULL and
leave IRQ_GUEST set.

Hence IRQ_GUEST should be cleared in dynamic_irq_cleanup where
action is set to NULL.

An addition remove BUGON at __pirq_guest_unbind that appears to be
bogus and not needed anymore.

Thanks Paolo Bonzini for NACKing previous patch, and pointing at the
correct solution.

Signed-off-by: Igor Mammedov <imammedo@redhat.com>
Reinstate the BUG_ON, but after the action==NULL check. Since we then
go and start interpreting action as an irq_guest_action_t, the BUG_ON
is relevant here.

More generally, the brute-force nature of dynamic_irq_cleanup() looks
a bit worrying. Possibly there should be more integratioin with
pirq_guest_unbind() logic, for cleaning up un-acked EOIs and the like.

Signed-off-by: Keir Fraser <keir@xen.org>
xen/arch/x86/irq.c